/**
 * @brief 信号量实现
 */

#include "mutex.h"

// Done

Semaphore::Semaphore(uint32_t count)
{
    if (sem_init(&m_semaphore, 0, count))
    {
        throw std::logic_error("sem_init error");
    }
}
// int sem_init(sem_t *sem, int pshared, unsigned int value);
// pshared 确定信号量是否可以在进程间共享。如果为0，则信号量只能在当前进程的线程间共享；如果非0，则信号量可以在进程间共享。

Semaphore::~Semaphore()
{
    sem_destroy(&m_semaphore);
}

// 获取信号量
void Semaphore::wait()
{
    if (sem_wait(&m_semaphore))
    {
        throw std::logic_error("sem_wait error");
    }
}

// 释放信号量
void Semaphore::notify()
{
    if (sem_post(&m_semaphore))
    {
        throw std::logic_error("sem_post error");
    }
}